package com.example.lettcode._202411._20241128;

import java.util.Arrays;

/*
628. 三个数的最大乘积
给你一个整型数组 nums ，在数组中找出由三个数组成的最大乘积，并输出这个乘积。

示例 1：
输入：nums = [1,2,3]
输出：6

示例 2：
输入：nums = [1,2,3,4]
输出：24

示例 3：
输入：nums = [-1,-2,-3]
输出：-6

提示：
3 <= nums.length <= 104
-1000 <= nums[i] <= 1000
 */
public class _02_san_ge_shu_zui_da_cheng_ji {

    public static void main(String[] args) {
        int[] nums = {-3, -10, 1,2,3,4, 6, 3};
        System.out.println(maximumProduct(nums));
    }

    public static int maximumProduct(int[] nums) {
        if (nums.length == 3) {
            return nums[0] * nums[1] * nums[2];
        }

        Arrays.sort(nums);
        int m = nums.length;
        int max = nums[m - 1] * nums[m - 2] * nums[m - 3];

        if (nums[0] <0 && nums[1] < 0) {
            max = Math.max(nums[0] * nums[1] * nums[m - 1], max);
        }
        return max;
    }

    /*
        找最小的两个值，和最大的三个值，需要找出最大的那个才行
     */
    public static int maximumProduct2(int[] nums) {
        int mina = Integer.MAX_VALUE, minb = Integer.MAX_VALUE;
        // amax最大
        int amax = Integer.MIN_VALUE, bmax = Integer.MIN_VALUE, cmax = Integer.MIN_VALUE;

        for (int num : nums) {
            if (num < mina) {
                minb = mina;
                mina = num;
            } else if (num < minb) {
                minb = num;
            }

            if (num > amax) {
                cmax = bmax;
                bmax = amax;
                amax = num;
            } else if (num > bmax) {
                cmax = bmax;
                bmax = num;
            } else if (num > cmax) {
                cmax = num;
            }
        }
        return Math.max(mina * minb * amax, amax * bmax * cmax);
    }
}
